import {
	createSSRApp
} from "vue";
import App from "./App";

/**
 * 1、区分实例类型：告诉 UniApp 框架，
 * 当前导出的实例是应用级别的根实例，
 * 而非页面实例（mpType: 'page'）或组件实例（默认不指定或无需指定）。
 * 
 * 2、确保框架正确处理生命周期：应用实例有其专属的生命周期
 * （如 onLaunch、onShow、onHide 等），
 * 通过 mpType: 'app' 声明后，
 * 框架会正确识别并触发这些生命周期函数，
 * 保证应用初始化、前后台切换等逻辑正常执行。
 * */
App.mpType = "app";
/**
 * 将 UniApp 原生的回调式 API 自动转换为支持 Promise 的形式，
 * 从而方便开发者使用 async/await 语法进行异步操作，
 * 提升代码的可读性和简洁性
 * */
import "@/uni.promisify.adaptor";

// 配置路由拦截，拦截 非白名单且未登录的跳转
// const routerAPIs = ['switchTab', 'navigateTo', 'redirectTo', 'reLaunch'];
// routerAPIs.forEach(routerAPI => {
// 	uni.addInterceptor(routerAPI, {
// 		invoke(options) {
// 			// 无需拦截的页面（如登录页、首页等）
// 			const whiteList = ["/pages/login/login", "/pages/index/index"];
// 			// 当前跳转的页面路径（注意：switchTab 只能跳转到 tabBar 页面，路径需带 "/"）
// 			const targetPath = options.url.startsWith("/") ? options.url : `/${options.url}`;

// 			// 判断是否需要拦截（不在白名单且未登录）
// 			const isLogin = uni.getStorageSync("token"); // 从本地存储或 Pinia 中获取登录状态
// 			if (!whiteList.includes(targetPath) && !isLogin) {
// 				// 拦截跳转，改为跳转到登录页
// 				uni.navigateTo({
// 					url: "/pages/login/login"
// 				});
// 				// 返回 false 终止原跳转
// 				return false;
// 			}

// 			// 允许跳转（不做处理）
// 			return options;
// 		},
// 		success(res) {
// 			console.log('路由跳转成功', res);
// 		},
// 		fail(err) {
// 			console.error('路由跳转失败', err);
// 		}
// 	})
// })

// 国际化 start
import {
	install as i18nInstall
} from "@/i18n/index.js";
// 国际化 end

// Pinia 集成状态管理 start
import store from "@/store";
// Pinia 集成状态管理 end

// 引入全局样式 / 主题 start
// uview-next UI样式组件库
import uViewNext from "uview-next";
// 引入全局样式 / 主题 end

// 注册全局组件 start
import CustomNavbar from "@/components/CustomNavbar/CustomNavbar.vue";
// 注册全局组件 end

export function createApp() {
	const app = createSSRApp(App);

	app.use(i18nInstall);
	app.use(store);
	app.use(uViewNext);

	// 注册全局组件 start
	app.component("CustomNavbar", CustomNavbar);
	// 注册全局组件 end

	return {
		app
	};
}